package com.oldbook.manage.service;

import com.oldbook.manage.domain.Order;
import com.oldbook.manage.domain.vo.OrderVO;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * 教材订单Service接口
 * 
 * @author Exiaoke
 * @date 2025-02-17
 */
public interface IOrderService 
{
    /**
     * 查询教材订单
     * 
     * @param orderId 教材订单主键
     * @return 教材订单
     */
    public OrderVO selectOrderByOrderId(Long orderId);

    /**
     * 查询教材订单列表
     * 
     * @param order 教材订单
     * @return 教材订单集合
     */
    public List<OrderVO> selectOrderList(OrderVO order);

    /**
     * 新增教材订单
     * 
     * @param order 教材订单
     * @return 结果
     */
    public int insertOrder(Order order);

    /**
     * 修改教材订单
     * 
     * @param order 教材订单
     * @return 结果
     */
    public int updateOrder(Order order);

    /**
     * 批量删除教材订单
     * 
     * @param orderIds 需要删除的教材订单主键集合
     * @return 结果
     */
    public int deleteOrderByOrderIds(Long[] orderIds);

    /**
     * 删除教材订单信息
     * 
     * @param orderId 教材订单主键
     * @return 结果
     */
    public int deleteOrderByOrderId(Long orderId);

    /**
     * /查询所有超期未归还的订单
     * @return
     */
     List<Order> getOverdueOrders();

    /**
     *
     * @param orderId
     * @param status
     * @return
     */
    boolean updateOrderStatus( Long orderId, String status);

    /**
     * 根据学号查询订单列表
     * @param studentId
     * @return
     */
    List<OrderVO> getOrderListByStudentId(String studentId);

/**
 * 批量更新订单状态
 */
    void batchUpdateOrderStatus(@Param("orderIds") List<Long> orderIds, @Param("status") String status);

    /**
     * 更新最后扣分日期
     * @param orderId
     * @param deductionDate
     */
    void updateLastDeductionDate(@Param("deductionDate") LocalDate deductionDate,@Param("orderId") Long orderId);

    /**
     * 生成订单
     * @param studentId
     * @param textbookId
     * @param quantity
     */
    void createOrder(@Param("studentId") String studentId,
                     @Param("textbookIds") Long textbookIds,
                     @Param("quantity") Integer quantity);
}
